#pragma once
#include<iostream>
#include<string>
#include<fstream>
#include<vector>
#include <boost/algorithm/string.hpp>
#include"cppjieba/Jieba.hpp"
namespace ns_util{
    class FileUtil{
public:
    static bool ReadFile(const std::string& file,std::string* results)
    {
        std::ifstream ifs(file,std::ios::in|std::ios::binary);
        if(!ifs.is_open())
        {
            std::cerr<<"ReadFile: "<<file<<":file open error"<<std::endl;
            return false;
        }
        std::string s;
        while(std::getline(ifs,s))
        {
            *results += s;
        }
        ifs.close();
        return true;
    }
    };
  class StringUtil{
public:
    static void Split(const std::string& line,std::vector<std::string>* out,const std::string& sep)
    {
        //token_compress_on:将连续出现的多个分隔符视为单个分隔符
        boost::split(*out,line,boost::is_any_of(sep),boost::token_compress_on);
    }
  };

           const char* const DICT_PATH = "./dict/jieba.dict.utf8";
    const char* const HMM_PATH = "./dict/hmm_model.utf8";
    const char* const USER_DICT_PATH = "./dict/user.dict.utf8";
    const char* const IDF_PATH = "./dict/idf.utf8";
    const char* const STOP_WORD_PATH = "./dict/stop_words.utf8";
  class JiebaUtil{
        private:
            static cppjieba::Jieba jieba;
        private:
            //JiebaUtil():jieba(DICT_PATH, HMM_PATH, USER_DICT_PATH, IDF_PATH, STOP_WORD_PATH)
            //{}
      public:
        static void CutString(const std::string& line,std::vector<std::string>* results)
        {
            jieba.CutForSearch(line,*results);
        }
  };
  cppjieba::Jieba JiebaUtil::jieba(DICT_PATH, HMM_PATH, USER_DICT_PATH, IDF_PATH, STOP_WORD_PATH);
}
